﻿using System.Collections.Concurrent;

namespace ZPeng.CSharpPro.Model.Cache
{
    // 内存缓存区
    internal class CacheMBuffer
    {
        //1  交换缓存数组，申请两个同样大小的缓存。当一个缓存装满后，使用另一个缓存。同时，将已满的缓存中数据剪切到磁盘文件中。
        // 2 不停申请缓存，前一个数组满了后，立刻申请一个新的数组。然后将原有数组交付给写文件模块。
        // 3 提前身亲两个缓存数组。第一个数组满了后，立刻使用第二个数组，同时开始申请一个新的缓存数组。第一个数据同样交付给写文件模块。
        // 4 启动一条线程大约耗时，4~6微秒。而直接申请一个10000长度的数组，耗时3~5微秒。所以，不应该用多线程。而是只申请一个缓存数组。如果满了就依次将数组交给写文件模块，申请新数组，将新数组交给通讯模块使用。

        const int MaxCount = 2000;
        double[] _buffer001;

        ConcurrentQueue<double[]> _buffer_ReadedForSave;

        public CacheMBuffer()
        {
            _buffer_ReadedForSave = new ConcurrentQueue<double[]>();
            _buffer001 = new double[MaxCount];
        }

        public double[] Buffer
        {
            get
            {
                return _buffer001;
            }
        }

        public ConcurrentQueue<double[]> Buffer_ReadedForSave { get => _buffer_ReadedForSave; }

        public void GetBuffer()
        {
            Buffer_ReadedForSave.Enqueue(_buffer001);

            _buffer001 = new double[MaxCount];
        }
    }
}
